#include "tree.h"

// 插入节点
void insert_node(Tree_Node **root, Elenemt_data data)
{
    if (NULL == (*root))
    {
        // 创建结点
        Tree_Node *new_node = (Tree_Node *)malloc(sizeof(Tree_Node));
        if (NULL == new_node)
        {
            ERRLOG("动态空间创建失败");
            return;
        }
        // 写入数据
        new_node->data = data;
        new_node->lchilb = NULL;
        new_node->rchilb = NULL;

        printf("%s插入成功\n", data.name);

        // 将 root 和 new_node 连接
        (*root) = new_node;

        return;
    }

    if (data.id < (*root)->data.id)
    {
        // 左孩子
        insert_node(&(*root)->lchilb, data);
        return;
    }
    else
    {
        // 右孩子
        insert_node(&(*root)->rchilb, data);
        return;
    }
    return;
}

// 先序遍历 根 左 右   preorder_traversal
void pre_rder(Tree_Node *root)
{
    if (NULL != root)
    {
        // 打印
        printf("%s\t%s\t%d\t%d\t%d\n",
               root->data.name, root->data.sex, root->data.age,
               root->data.id, root->data.sco);
        // 左
        pre_rder( root->lchilb );
        // 右
        pre_rder( root->rchilb );
    }
}

// 释放 左 右 根
void free_tree(Tree_Node ** root)
{
    if (NULL != *root)
    {
        // 左
        free_tree( &(*root)->lchilb );
        // 右
        free_tree( &(*root)->rchilb );
        // 释放
        printf("%s释放成功\n", (*root)->data.name);
        free(* root);
        *root = NULL;
    }
}

